/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GestorCuota;

import ConexionBD.ConexionBD;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author frpp
 */

public class CuotaBD {
    
    	private static CuotaBD Instancia=null;

        
        public void CuotaBD(){}
        
        
        
        static public CuotaBD getInstancia(){
            if (Instancia == null){
                Instancia = new CuotaBD();
            }
            return Instancia;
        }
        
        
    @Override
    /**
     * Sobrecarga del método clone para impedir que se duplique la instancia
     * (Exigencias del patrón Singleton)
     * @param void
     * @return Object
     */
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException(); 
    }
        
        
        /**
	 * 
	 * @param Cuota
	 */
	public Cuota addCuota(Cuota cuota){
            
            Cuota result;
            String consulta="INSERT INTO Cuota( anioNacimiento, "
                                            + " cuotadeInscripcion, " +
                " cuotaMensual,  cuotaTotal,  temporada) " +
                " VALUES ('" +
                cuota.getAnioNacimiento() +
            "','" + cuota.getCuotadeInscripcion() +
            "','" + cuota.getCuotaMensual() +
            "','" + cuota.getCuotaTotal() +
            "','" + cuota.getTemporada() +
                    "');";
            
           
                   
        
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD = ConexionBD.getInstancia().actualizar(consulta);
                salidaBD.first();
                // Establece el valor de IdJornada generado por la BD en el objeto jornada
                cuota.setIdCuota(Integer.parseInt(salidaBD.getString(1)));
                result = cuota;
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                ex.printStackTrace();
                result = null;
            }
            return result;
	}

        
        
        
	/**
	 * 
	 * @param Cuota
	 */
	public boolean deleteCuota(Cuota cuot){
            
            String consulta;
            Boolean salida = true;
            
            consulta = "DELETE FROM Cuota WHERE IdCuota=" +  cuot.getIdCuota() +
                    ";";
            
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD = ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                salida= false;
            }
		return salida;
	}

	
        
        
        
        
        
        public Cuota getCuota(int idCuota){
        String consulta="SELECT * FROM Cuota WHERE "+
                        " IdCuota  = '" + idCuota + "'"+
                        ";";
        
        Cuota cuot = null;
                try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
                
                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía,  
                        cuot = new Cuota(
                                        tabla.getInt("AnioNacimiento"),
                                        tabla.getDouble("CuotadeInscripcion"),
                                        tabla.getDouble("CuotaMensual"),
                                        tabla.getDouble("CuotaTotal"),
                                        tabla.getString("Temporada")                       
                                        );
                    cuot.setIdCuota(idCuota);
                
                }
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                ex.printStackTrace();
                return null;
            }
            return cuot;
	}
        
        
        

        
        
        
	/**
	 * 
	 * @param anioNacimiento
         * @param cuotadeInscripcion
         * @param cuotaMensual
         * @param cuotaTotal
         * @param temporada
         * 
	 */
	public ArrayList<Cuota> getCuota( String temporada , int anioNacimiento){
            String consulta;
            
           
                consulta="SELECT * FROM Cuota WHERE " +
                        " Temporada = '" + temporada + "'";
                       // " AND Cuota.CuotaInscripcion = " + cuotaInscripcion +
                       // " AND Cuota.CuotaMensual = " + cuotaMensual +
                       // " AND Cuota.CuotaTotal = " + cuotaTotal +
                      
                   
                
                if(anioNacimiento != -1){
                    consulta+= " AND AnioNacimiento = '" + anioNacimiento  + "'" ;
                }
                
            consulta += ";";
            
                ArrayList<Cuota> cuot =new ArrayList<Cuota>();
                Cuota aux;
                try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía,  
                        aux = new Cuota(tabla.getInt("AnioNacimiento"), 
                                                 tabla.getDouble("CuotadeInscripcion"), 
                                                 tabla.getDouble("CuotaMensual"),
                                                 tabla.getDouble("CuotaTotal"),
                                                 tabla.getString("Temporada"));
                        aux.setIdCuota(tabla.getInt("IdCuota"));
                    
                        cuot.add(aux);
                        

                }
                
              
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                ex.printStackTrace();
                return null;
            }
            return cuot;
	}
        
   
        
        

	/**
	 * 
	 * @param Cuota
	 */
	public boolean updateCuota(Cuota cuota){
            Boolean salida = true;

            String consulta="UPDATE Cuota SET AnioNacimiento ='" + cuota.getAnioNacimiento() + 
                "', CuotadeInscripcion='" + cuota.getCuotadeInscripcion() + 
                "', CuotaMensual='" + cuota.getCuotaMensual() +
                "', CuotaTotal='" + cuota.getCuotaTotal() +
                "', Temporada='" + cuota.getTemporada() +
                "'";
            consulta += " WHERE IdCuota = " + cuota.getIdCuota() + ";";

        System.out.println(consulta);
            try {
                ConexionBD.getInstancia().conectar();
                ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                System.out.println(ex);
                salida = false;
            }
            return salida;
	}
        
        public ArrayList<String> getTemporadas(){
        
            ArrayList aux = new ArrayList<String>();
            
            String consulta="select distinct Temporada from Cuota";

        
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
                
                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía,

                       aux.add(tabla.getString("Temporada"));
                }
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            if (aux.isEmpty()) {
                return null;
            }
            else {
                return aux;
            }
        }
    
}
